package com.wuwei.aliocr.utils;

import com.alibaba.fastjson.JSONArray;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.Date;
import java.util.Random;

/**
 * 通用工具类
 */
@Component
public class CommonUtils {
    public static   JSONArray randomSelect(JSONArray array, int count) {
        if (count > array.size()) {
            throw new IllegalArgumentException("Count cannot be greater than array length.");
        }

        JSONArray result = new JSONArray();
        Random random = new Random();

        for (int i = 0; i < count; i++) {
            int index = random.nextInt(array.size());
            Object o = array.get(index);
            result.add(o);
            array.remove(index);
        }

        return result;
    }

    /**
     * 比较2023年10月9日和2023年7月10日谁更大的方法
     * @param date 如果date靠后，返回true
     * @param inputDate 如果inputDate靠后，返回false
     * @return
     */
    public boolean afterDay(String date, String inputDate) {
        int year1 = Integer.parseInt(date.substring(0, date.indexOf("年")));
        int month1 = Integer.parseInt(date.substring(date.indexOf("年") + 1, date.indexOf("月")));
        int day1 = Integer.parseInt(date.substring(date.indexOf("月") + 1,date.indexOf("日")));
        LocalDate date1 = LocalDate.of(year1,month1 ,day1);
        int year2 = Integer.parseInt(inputDate.substring(0, inputDate.indexOf("年")));
        int month2 = Integer.parseInt(inputDate.substring(inputDate.indexOf("年") + 1, inputDate.indexOf("月")));
        int day2 = Integer.parseInt(inputDate.substring(inputDate.indexOf("月") + 1, inputDate.indexOf("日")));
        LocalDate date2 = LocalDate.of(year2,month2 ,day2);
        if (isDateLater(date1, date2)) {
            return true;
        } else {
            return false;
        }
    }

    public static boolean isDateLater(LocalDate date1, LocalDate date2) {
        return date1.isEqual(date2) || date1.isAfter(date2);
    }

    public Integer nowYear (){
        LocalDate currentDate = LocalDate.now();
        int year = currentDate.getYear();
        return year;
    }

    //将xxxx年xx月xx日转变成xxxx-xx-xx的格式
    public String dateFormat(String inputDate) {
        // 构造日期对象
        LocalDate date = LocalDate.parse(inputDate, DateTimeFormatter.ofPattern("yyyy年M月d日"));

        // 格式化日期
        String formattedDate = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));

        System.out.println(formattedDate);
        return formattedDate;
    }


//    /**
//     * 因为数据库里的日期格式是xxxx-xx-xx的，需要将日期格式进行转换
//     * @param date
//     * @return
//     */
//    public String mySqlDateFormatDateToString(Date date) {
//
//        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
//
//        String outputDate = simpleDateFormat.format(date);
//
//        return outputDate;
//    }

    /**
     * 因为数据库里的日期格式是xxxx-xx-xx的，需要将日期格式进行转换
     * @param date
     * @return
     */
    public String mySqlDateFormatDateDashToString(Date date) {

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

        String outputDate = simpleDateFormat.format(date);

        return outputDate;
    }

//    /**
//     * 因为数据库里的日期格式date属性，需要将String属性的xxxx年xx月xx日转换成xxxx-xx-xx的date属性
//     * @param date
//     * @return
//     */
//    public Date mySqlDateFormatStringToDate(String date) {
//        System.out.println(date);
//        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
//        LocalDate newDate = LocalDate.parse(date, formatter);
//        Date returnDate = java.sql.Date.valueOf(newDate);
//        return returnDate;
//    }

    /**
     * 因为数据库里的日期格式date属性，需要将String属性的xxxx年xx月xx日转换成xxxx-xx-xx的date属性
     * @param date
     * @return
     */
    public Date mySqlDateFormatStringOfDashToDate(String date) {
        System.out.println(date);
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate newDate = LocalDate.parse(date, formatter);
        return java.sql.Date.valueOf(newDate);
    }



}
